import path from 'path';
import fs from 'fs';

/**
 * 统一的数据库路径管理
 * 确保所有API都使用同一个数据库文件
 */

let cachedDbPath: string | null = null;

export function getDatabasePath(): string {
  if (cachedDbPath) {
    return cachedDbPath;
  }

  // 环境变量优先
  if (process.env.DATABASE_PATH) {
    cachedDbPath = process.env.DATABASE_PATH;
    console.log('📊 使用环境变量数据库路径:', cachedDbPath);
    return cachedDbPath;
  }

  const cwd = process.cwd();
  
  // 在standalone模式下，强制所有API使用同一个数据库文件
  if (cwd.includes('.next/standalone')) {
    // 在standalone模式下，统一使用standalone目录下的数据库
    cachedDbPath = path.join(cwd, 'data', 'database.sqlite');
    console.log('📊 [STANDALONE] 统一使用数据库路径:', cachedDbPath);
  } else {
    // 开发模式或构建过程中
    cachedDbPath = path.join(cwd, 'data', 'database.sqlite');
    console.log('📊 [DEV] 使用开发数据库路径:', cachedDbPath);
  }

  return cachedDbPath;
}

/**
 * 清除缓存的数据库路径（测试用）
 */
export function clearDatabasePathCache(): void {
  cachedDbPath = null;
}

/**
 * 同步数据库文件（从源文件同步到目标文件）
 */
export function syncDatabaseFile(sourcePath: string, targetPath: string): void {
  try {
    if (fs.existsSync(sourcePath)) {
      const targetDir = path.dirname(targetPath);
      if (!fs.existsSync(targetDir)) {
        fs.mkdirSync(targetDir, { recursive: true });
      }
      fs.copyFileSync(sourcePath, targetPath);
      console.log(`📋 数据库同步完成: ${sourcePath} -> ${targetPath}`);
    }
  } catch (error) {
    console.error('❌ 数据库同步失败:', error);
  }
}